/*
* This file is a part of the open-eBackup project.
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
* If a copy of the MPL was not distributed with this file, You can obtain one at
* http://mozilla.org/MPL/2.0/.
*
* Copyright (c) [2024] Huawei Technologies Co.,Ltd.
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
*/
package openbackup.system.base.common.aspect;

import openbackup.system.base.common.constants.TokenBo;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.Map;

/**
 * Operation Aspect
 *
 * @param <A> template type
 */
public interface OperationInterceptor<A extends Annotation> {
    /**
     * get supported annotation type
     *
     * @return supported annotation type
     */
    Class<A> getSupportedAnnotationType();

    /**
     * intercept
     *
     * @param method method
     * @param annotation annotation
     * @param context    context
     * @param tokenBo    token bo
     */
    void intercept(Method method, A annotation, Map<String, Object> context, TokenBo tokenBo);
}
